using System;
using System.Collections.Generic;
using TestClassesForConcepts;
using TestClassesForConcepts.Sample1;

concept C1[T] 
{
    using AT1 = A<MyS, T>;
    require AT1 <: C<KeyA>;
}

concept C2[T, S, U] 
{
    type A1;
    type A2 == B;
    using B1 = S;
    //using B1 = A1; 
}

concept C3[T, S, U, V] 
{
    type A1 <: B;
    type A2 == U;
    type A3 <: Sample1.C<MyS>;
    type B1 == MyS;
    type B2 <: A1;
    using _B3 = B<A2, C<B2>>;
    type B3 == _B3;
    
    require S <: Sample1.A<C<B2>, B<V, _B3>>;
    using S1 = U;
    require A<B3, MyT> >: C<B3>; 
}